// // 泛型

// // 泛型接口   泛型传递的是类型<类型>

// // interface ResData<T> {
// //   msg: string
// //   code: number
// //   data: T
// // }

// // interface User {
// //   name: string
// //   age: number
// // }

// // interface Goods {
// //   id: number
// //   goodsName: string
// // }

// // let user: ResData<User> = {
// //   msg: 'success',
// //   code: 304,
// //   data: {
// //     name: '老韩',
// //     age: 18
// //   }
// // }

// // let goods: ResData<Goods> = {
// //   msg: 'success',
// //   code: 304,
// //   data: {
// //     id: 10000,
// //     goodsName: '电脑'
// //   }
// // }

// // 泛型别名

// type ResData<T> = {
//   msg: string
//   code: number
//   data: T
// }

// type User = {
//   name: string
//   age: number
// }

// type Goods = {
//   id: number
//   goodsName: string
// }

// let user: ResData<User> = {
//   msg: 'success',
//   code: 304,
//   data: {
//     name: '老韩',
//     age: 18
//   }
// }

// let goods: ResData<Goods> = {
//   msg: 'success',
//   code: 304,
//   data: {
//     id: 10000,
//     goodsName: '电脑'
//   }
// }

// // 泛型函数

// function createArray<T> (len:number, value:T) {
//   let result = []
//   for(let i = 0; i<len;i++) {
//     result[i] = value
//   }
//   return result
// }

// createArray<number>(5,1)

// createArray<string>(5,'a')


// // 泛型约束 
// // function logLen<T>(obj: T) {
// //   console.log(obj.length);  
// // }

// interface lengthObj {
//   length: number
// }
// // 利用extends继承需要的属性
// function logLen<T extends lengthObj>(obj: T) {
//   console.log(obj.length);  
// }

// logLen([1,2,3])
// logLen({length: 55555})
// logLen(100)
// logLen('123123')